// 文件路径：@/stores/user.ts
import { defineStore } from 'pinia'
import { ref, computed } from 'vue'

export const useUserStore = defineStore('user', () => {
  // 状态：Token。从 localStorage 读取，实现状态持久化
  const token = ref<string | null>(localStorage.getItem('user-token'))

  // 状态：用户信息。如果需要持久化用户信息，也可以从 localStorage 读取
  const userInfo = ref({
    username: '',
    id: '',
    email: '',
    avatar: '',
    role: 'user' // 角色字段：'admin' | 'user'
  })

  // 核心修复：将 isLoggedIn 定义为 computed 属性
  // 这样它会动态地追踪 token.value 的状态，确保响应式正确
  const isLoggedIn = computed(() => !!token.value) // ✅ 确保是 computed

  // Getter：是否为管理员
  const isAdmin = computed(() => userInfo.value.role === 'admin')

  // Action：设置 Token
  const setToken = (newToken: string) => {
    token.value = newToken
    // 确保 token 写入 localStorage
    localStorage.setItem('user-token', newToken)
    // ❗️ 关键：isLoggedIn 会自动更新，无需手动设置
  }

  // Action：设置用户信息
  const setUserInfo = (info: {
    username: string
    id?: string
    email?: string
    avatar?: string
    role?: 'admin' | 'user'
  }) => {
    userInfo.value = { ...userInfo.value, ...info }
    // 推荐：如果需要持久化用户信息，在此处写入 localStorage
    // localStorage.setItem('user-info', JSON.stringify(userInfo.value));
  }

  // Action：登出
  const logout = () => {
    token.value = null
    // ❗️ 关键：isLoggedIn 会自动更新

    // 重置用户信息
    userInfo.value = { username: '', id: '', email: '', avatar: '', role: 'user' }

    // 清除 localStorage 中的 token
    localStorage.removeItem('user-token')
    // 如果上面写入了 user-info，也要在此处清除
    // localStorage.removeItem('user-info');
  }

  // Action：模拟登录 (如果你不需要这个模拟，可以删除)
  const login = (username: string, password: string) => {
    if (username && password) {
      // 模拟：admin/admin 为管理员账号
      const role = username === 'admin' ? 'admin' : 'user'

      setToken(`token_${Date.now()}_${username}`)
      setUserInfo({
        username,
        id: `user_${Date.now()}`,
        role
      })
      return true
    }
    return false
  }

  return {
    token,
    userInfo,
    isLoggedIn, // 返回 computed 属性
    isAdmin,
    setToken,
    setUserInfo,
    logout,
    login
  }
})
